package com.changgou.goods.controller;

import com.changgou.entity.PageResult;
import com.changgou.entity.Result;
import com.changgou.entity.StatusCode;
import com.changgou.goods.service.SkuService;
import com.changgou.goods.pojo.Sku;
import com.github.pagehelper.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@RestController
@CrossOrigin
@RequestMapping("/sku")
public class SkuController {


    @Autowired
    private SkuService skuService;

    /**
     * 查询全部数据
     *
     * @return
     */
    @GetMapping
    public Result findAll() {
        List<Sku> skuList = skuService.findAll();
        return new Result(true, StatusCode.OK, "查询成功", skuList);
    }

    /***
     * 根据ID查询数据
     * @param id
     * @return
     */
    @GetMapping("/{id}")
    public Result<Sku> findById(@PathVariable String id) {
        Sku sku = skuService.findById(id);
        return new Result<>(true, StatusCode.OK, "查询成功", sku);
    }


    /***
     * 新增数据
     * @param sku
     * @return
     */
    @PostMapping
    public Result add(@RequestBody Sku sku) {
        skuService.add(sku);
        return new Result(true, StatusCode.OK, "添加成功");
    }


    /***
     * 修改数据
     * @param sku
     * @param id
     * @return
     */
    @PutMapping(value = "/{id}")
    public Result update(@RequestBody Sku sku, @PathVariable String id) {
        sku.setId(id);
        skuService.update(sku);
        return new Result(true, StatusCode.OK, "修改成功");
    }


    /***
     * 根据ID删除品牌数据
     * @param id
     * @return
     */
    @DeleteMapping(value = "/{id}")
    public Result delete(@PathVariable String id) {
        skuService.delete(id);
        return new Result(true, StatusCode.OK, "删除成功");
    }

    /***
     * 多条件搜索品牌数据
     * @param searchMap
     * @return
     */
    @GetMapping(value = "/search")
    public Result findList(@RequestParam Map searchMap) {
        List<Sku> list = skuService.findList(searchMap);
        return new Result(true, StatusCode.OK, "查询成功", list);
    }


    /***
     * 分页搜索实现
     * @param searchMap
     * @param page
     * @param size
     * @return
     */
    @GetMapping(value = "/search/{page}/{size}")
    public Result findPage(@RequestParam Map searchMap, @PathVariable int page, @PathVariable int size) {
        Page<Sku> pageList = skuService.findPage(searchMap, page, size);
        PageResult pageResult = new PageResult(pageList.getTotal(), pageList.getResult());
        return new Result(true, StatusCode.OK, "查询成功", pageResult);
    }

    /**
     * sku多条件查询,因为搜索微服务监控消息队列收到上架商品的spuId之后,需要将该商品的Sku信息查询出来,然后写入到es索引数据库中
     * 所以此处需要使用Feign来实现微服务之间的调用.因为spuId不是sku的id,所以可以使用service层的findList接口.
     *
     * @param spuId 搜索微服务监听到的消息队列所传递过来的spuId
     * @return
     */
    @GetMapping("/spu/{spuId}")
    public List<Sku> findSkuListBySpuId(@PathVariable String spuId) {
        Map<String, Object> searchMap = new HashMap<>();
        //此处做了一个操作,当传递过来的spuId为all时,会将数据库中所有状态为"1",即上架状态的商品添加到map集合中,
        //然后通过搜索微服务的Feign调用来将所有上架商品上传到es中.但是实际开发中需要严格根据开发文档来,一般不能这样写.
        if (!"all".equals(spuId)) {
            searchMap.put("spuId", spuId);
        }
        //如果传递的spuId为all,则会将status为1的所有商品存储到list集合中
        //如果传递的spuId不是all,则会将spuId和status="1"的商品存入到list集合中,从而只存入该条数据.
        searchMap.put("status", "1");
        List<Sku> list = skuService.findList(searchMap);
        return list;
    }

<<<<<<< HEAD
    /**
     * 扣减库存并添加销量
     *
     * @param username
     * @return
     */
    @PostMapping("/decr/count")
    public Result decrCount(@RequestParam("username") String username) {
        skuService.decrCount(username);
        return new Result(true, StatusCode.OK, "库存扣减成功");
    }
=======
>>>>>>> parent of 3e34cd2... day08
}
